1);
}
+static void
+buffer_release_callback (void *_data,
+ struct wl_buffer *wl_buffer)
+{
+ cairo_surface_t *cairo_surface = _data;
+
+ cairo_surface_destroy (cairo_surface);
+}
+
+static const struct wl_buffer_listener buffer_listener = {
+ buffer_release_callback
+};
+
GdkCursor *
_gdk_wayland_display_get_cursor_for_surface (GdkDisplay *display,
cairo_surface_t *surface,
{
GdkWaylandCursor *cursor;
GdkWaylandDisplay *wayland_display = GDK_WAYLAND_DISPLAY (display);
+ struct wl_buffer *buffer;
cairo_t *cr;
cursor = g_object_new (GDK_TYPE_WAYLAND_CURSOR,
cursor->surface.width,
cursor->surface.height,
cursor->surface.scale);
+
+ buffer = _gdk_wayland_shm_surface_get_wl_buffer (cursor->surface.cairo_surface);
+ wl_buffer_add_listener (buffer, &buffer_listener, cursor->surface.cairo_surface);
+
if (surface)
{
cr = cairo_create (cursor->surface.cairo_surface);
uint32_t scale;
} GdkWaylandCairoSurfaceData;
-static void
-buffer_release_callback (void *_data,
- struct wl_buffer *wl_buffer)
-{
- cairo_surface_t *surface = _data;
-
- cairo_surface_destroy (surface);
-}
-
-static const struct wl_buffer_listener buffer_listener = {
- buffer_release_callback
-};
-
static struct wl_shm_pool *
create_shm_pool (struct wl_shm *shm,
int size,
data->buffer = wl_shm_pool_create_buffer (data->pool, 0,
width*scale, height*scale,
stride, WL_SHM_FORMAT_ARGB8888);
- wl_buffer_add_listener (data->buffer, &buffer_listener, surface);
cairo_surface_set_user_data (surface, &gdk_wayland_shm_surface_cairo_key,
data, gdk_wayland_cairo_surface_destroy);
impl->pending_commit = TRUE;
}
+static void
+buffer_release_callback (void *_data,
+ struct wl_buffer *wl_buffer)
+{
+ cairo_surface_t *cairo_surface = _data;
+
+ cairo_surface_destroy (cairo_surface);
+}
+
+static const struct wl_buffer_listener buffer_listener = {
+ buffer_release_callback
+};
+
static void
gdk_wayland_window_ensure_cairo_surface (GdkWindow *window)
{
else if (!impl->cairo_surface)
{
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_window_get_display (impl->wrapper));
+ struct wl_buffer *buffer;
impl->cairo_surface = _gdk_wayland_display_create_shm_surface (display_wayland,
impl->wrapper->width,
impl->wrapper->height,
impl->scale);
+ buffer = _gdk_wayland_shm_surface_get_wl_buffer (impl->cairo_surface);
+ wl_buffer_add_listener (buffer, &buffer_listener, impl->cairo_surface);
}
}